package org.jstryker.validator; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.URL; import org.jstryker.exception.JStrykerException; import javax.validation.constraints.NotNull; import java.lang.reflect.Field; public class HibernateValidatorMatchers { private String field; private Class<?> clazz; private Field declaredField; public static HibernateValidatorMatchers validate() { return new HibernateValidatorMatchers(); } public HibernateValidatorMatchers field(String field) { if (field == null) { throw new IllegalArgumentException("Field cannot be null."); } this.field = field; return this; } public HibernateValidatorMatchers inClass(Class<?> clazz) { if (clazz == null) { throw new IllegalArgumentException("Class cannot be null."); } this.clazz = clazz; return this; } private Field getDeclaredField() { if (declaredField == null) { try { declaredField = clazz.getDeclaredField(field); } catch (NoSuchFieldException e) { throw new JStrykerException(e.getMessage(), e); } } return declaredField; } public HibernateValidatorMatchers cannotBeEmpty() { if (!getDeclaredField().isAnnotationPresent(NotEmpty.class)) { String message = String.format("Field %s allow empty values.", field); throw new AssertionError(message); } return this; } public HibernateValidatorMatchers shoudlBeUrl() { if (!getDeclaredField().isAnnotationPresent(URL.class)) { String message = String.format("Field %s allow invalid url values.", field); throw new AssertionError(message); } return this; } public HibernateValidatorMatchers cannotBeNull() { if (!getDeclaredField().isAnnotationPresent(NotNull.class)) { String message = String.format("Field %s allow null values.", field); throw new AssertionError(message); } return this; } }